package com.yidu.hbatsams.action.emp;

import com.yidu.hbatsams.domain.*;
import com.yidu.hbatsams.domain.vo.UserVo;
import com.yidu.hbatsams.service.*;
import com.yidu.hbatsams.service.emp.AtsEmpAthleteService;
import com.yidu.hbatsams.service.emp.AtsEmpCoachService;
import com.yidu.hbatsams.service.emp.AtsEmpExpertService;
import com.yidu.hbatsams.utils.Message;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @描述：运动员Action
 * @backage:com.yidu.hbatsams.action
 * @Author: 石嘉澄
 * @Date: 2019/11/30
 **/
@Controller
@RequestMapping("/UserseControllerAthlete")
public class AtsEmpAthleteController {
    /**
     * 运动员service接口
     */
    @Resource
    AtsEmpAthleteService atsEmpAthleteService;
    /**
     * 字典service接口
     */
    @Resource
    AtsDataDicSerivce atsDataDicSerivce;
    /**
     * 教练员service接口
     */
    @Resource
    AtsEmpCoachService atsEmpCoachService;
    /**
     * 体育项目service接口
     */
    @Resource
    AtsBaseSportService atsBaseSportService;
    /**
     * 专家service接口
     */
    @Resource
    AtsEmpExpertService atsEmpExpertService;

    /**
     * 查询所有运动员信息
     * @param pageNum 当前页
     * @param pageSize 长度+
     * @param athleteName 运动员名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param session HttpSession对象
     * @return 运动员信息的集合
     */
    @ResponseBody
    @RequestMapping("selectAll")
    public Map<String,Object> findAll(@RequestParam("page") Integer pageNum, @RequestParam("limit") Integer pageSize, String athleteName,String startTime,String endTime, HttpSession session){
        //通过session获取UserVo对象
        UserVo user = (UserVo) session.getAttribute("user");
        //创建HashMap<String,Object>
        Map<String,Object> map = new HashMap<String,Object>();
        //创建List<AtsEmpAthlete> 集合
        List<AtsEmpAthlete> list=new ArrayList<AtsEmpAthlete>();
        //创建 count
        Long count;
        //通过session获取到的用户名判断是不是超级管理员
        if("admin".equals(user.getUserName())){
            //调用查询所有分页的方法
            count = atsEmpAthleteService.count();
            //调用查询所有运动员信息的方法
            list = atsEmpAthleteService.selectAll(pageNum,pageSize,athleteName,startTime,endTime);
        }else{
            //调用查询教练员权限的分页方法countCoach
            count = atsEmpAthleteService.countCoach(Integer.valueOf(user.getClerkId()));
            //调用查询教练员旗下的运动员信息
            list = atsEmpAthleteService.selectAllCoach(pageNum,pageSize,athleteName,startTime,endTime,Integer.valueOf(user.getClerkId()));
        }
        //给map赋值code,msg,count,data
        map.put("code", 0);
        map.put("msg", "");
        map.put("count", count); // 总行数
        map.put("data", list);
        //返回map
        return map;
    }

    /**
     * 根据ID查询运动员信息
     * @param athleteId 运动员ID
     * @return  运动员信息的集合
     */
    @ResponseBody
    @RequestMapping("selectMore")
    public AtsEmpAthlete selectById(Integer athleteId){
        //调用根据ID查询运动员的方法
        AtsEmpAthlete ats = atsEmpAthleteService.findById(athleteId);
        return ats;
    }

    /**
     * 逻辑删除 运动员4
     * @param athleteId 运动员ID
     * @return
     */
    @ResponseBody
    @RequestMapping("delete")
    public Message deleteById(Integer athleteId){
        //创建msg对象
        Message msg = new Message();
        //调用根据运动员ID查询的方法查询删除前的数据
        AtsEmpAthlete athlete = atsEmpAthleteService.selectByPrimaryKey(athleteId);
        //调用用户表的删除运动员方法
        atsEmpExpertService.deleteClerk("4",String.valueOf(athlete.getAthleteId()));
        //调用根据运动员ID的删除方法
        atsEmpAthleteService.deleteByPrimaryKey(athleteId);
        msg.setNum(1);
        msg.setMsg("删除成功！");
        return msg;
    }
    /**
     * 批量删除 运动员4
     * @param athletes
     * @return
     */
    @ResponseBody
    @RequestMapping("deleteMany")
    public Message deleteMoreById(String athletes){
        //创建字符串数组
        String[] ids = null;
        //创建msg对象
        Message msg = new Message();
        msg.setNum(1);
        //如果传过来的对象不为空
        if(athletes!=null && !"".equals(athletes)){
            //根据，分割split
            ids=athletes.split(",");
        }
        //循环遍历ids
        for (int i = 0; i < ids.length; i++){
            //获取当前运动员id
            String athlete = ids[i];
            //调用用户表的删除方法 4
            atsEmpExpertService.deleteClerk("4",String.valueOf(athlete));
            //调用运动员的根据ID删除方法
            atsEmpAthleteService.deleteByPrimaryKey(Integer.valueOf(athlete));
        }
        msg.setMsg("操作成功");
        return msg;
    }
    /**
     * 查询技术等级
     * @return
     */
    @ResponseBody
    @RequestMapping("findBySkill")
    public List<AtsDataDic> findSkill(){
        //调用字典的查询技术等级的方法
        return atsDataDicSerivce.findBySkill();
    }

    /**
     * 文化程度
     * @return
     */
    @ResponseBody
    @RequestMapping("findByCulture")
    public List<AtsDataDic> findCulture(){
        //调用字典的查询文化程度的方法
        return atsDataDicSerivce.findByCulture();
    }

    /**
     * 最好成绩
     * @return
     */
    @ResponseBody
    @RequestMapping("findByBest")
    public List<AtsDataDic> findBest(){
        //调用字典的查询最好成绩的方法
        return atsDataDicSerivce.findByBest();
    }

    /**
     *  查询教练员的方法
     * @param session HttpSession对象
     * @return 教练员的集合
     */
    @ResponseBody
    @RequestMapping("findByName")
    public List<AtsEmpCoach> findName(HttpSession session) {
        //通过session获取User对象
        UserVo user = (UserVo) session.getAttribute("user");
        //创建List<AtsEmpCoach>集合
        List<AtsEmpCoach> coach = new ArrayList<>();
        //通过session获取到的用户名判断是不是超级管理员
        if("admin".equals(user.getUserName())){
            //调用教练员的查询方法
            coach = atsEmpCoachService.findByName();
        }else {
            //调用教练员的根据ID查询方法
            coach = atsEmpCoachService.findByCoachName(Integer.valueOf(user.getClerkId()));
        }
        return coach;
    }

    /**
     * 查询原教练
     * @return
     */
    @ResponseBody
    @RequestMapping("findAllCoachName")
    public List<AtsEmpCoach> findAllCoachName(){
        return atsEmpCoachService.findByName();
    }

    /**
     * 查询项目名称
     * @return
     */
    @ResponseBody
    @RequestMapping("findAllSportName")
    public List<AtsBaseSport>findSportName(){
        //调用体育项目的查询项目方法
        return atsBaseSportService.findAllSportName();
    }

    /**
     *  新增和修改的方法
     * @param record 运动员对象
     * @param session session HttpSession对象
     * @return mes对象
     */
    @ResponseBody
    @RequestMapping("insertUpdate")
    public Message addInfoUpdate(AtsEmpAthlete record,HttpSession session ){
        //创建Message对象
        Message mes = new Message();
        //创建User对象
        User user = new User();
        //创建Date日期对象
        java.util.Date date = new Date();
        //设置日期格式SimpleDateFormat
        SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
        //创建UUID.randomUUID().toString().replaceAll("-","");
        String uuid = UUID.randomUUID().toString().replaceAll("-","");
        //通过session获取UserVo对象
        UserVo userTwo = (UserVo) session.getAttribute("user");
        //根据前台得到教练的值转为整数类型
        int coachName =  Integer.valueOf(record.getCoachName());
        //调用的根据教教练员练员ID查询
        AtsEmpCoach name = atsEmpCoachService.findById(coachName);
        //查询到的教练员名称设置到ATS参数中
        record.setCoachName(name.getCoachName());
        //设置教练员ID在运动员表里
        record.setCoachId(coachName);
        //判断运动员ID不为空且存在进入修改
        if(record.getAthleteId() != null && record.getAthleteId() > 0){
            //查询到修改前的数据
            AtsEmpAthlete athlete = atsEmpAthleteService.findById(record.getAthleteId());
            //调用查询用户表信息的方法findClerk  4
            User userThree = atsEmpExpertService.findClerk("4",String.valueOf(athlete.getAthleteId()));
            //设置用户的名称
            user.setUserName(record.getAthleteName());
            //设置用户的手机号
            user.setUserPhone(record.getPhone());
            //设置用户表的运动员ID
            user.setClerkId(String.valueOf(record.getAthleteId()));//运动员ID
            //设置用户表的运动员名称
            user.setClerkName(record.getAthleteName());
            //设置是否有效
            user.setUserValidity("有效");
            //设置创建时间
            user.setUserTime(dateFormat.format(date));
            //设置创建人
            user.setUserPeople(user.getUserName());
            //通过查询用户表信息的方法设置用户表的ID
            user.setUserId(userThree.getUserId());
            //调用用户表修改的方法
            atsEmpExpertService.updateByPrimaryKeySelective(user);
            //设置运动员表创建人
            record.setCreater(userTwo.getUserName());
            //调用运动员表的修改方法
            atsEmpAthleteService.updateByPrimaryKey(record);
        //当运动员主键ID不存在的时候进入新增
        }else if(record.getAthleteId() == null){
            //设置运动员表创建人
            record.setCreater(userTwo.getUserName());
            //调用运动员表的新增方法
            atsEmpAthleteService.insert(record);
            //调用UUID设置用户表的ID
            user.setUserId(uuid);
            //设置用户表的运动员名称
            user.setUserName(record.getAthleteName());
            //设置用户表的密码
            user.setUserPwd("123456");
            //设置用户表的手机号
            user.setUserPhone(record.getPhone());
            //用来区分表，1 领导，2 教练员，3 专家， 4 运动员
            user.setCompanyId("4");
            //设置用户表的职业
            user.setCompanyName("运动员");
            //设置用户表的运动员ID
            user.setClerkId(String.valueOf(record.getAthleteId()));
            //设置用户表的运动员名称
            user.setClerkName(record.getAthleteName());
            //设置是否有效
            user.setUserValidity("有效");
            //设置运动员表创建时间dateFormat.format(date)
            user.setUserTime(dateFormat.format(date));
            //设置运动员表创建人
            user.setUserPeople(user.getUserName());
            //调用运动员表的新增方法
            atsEmpExpertService.insert(user);

            mes.setNum(1);
        }
        mes.setMsg("操作成功！");
        return mes;
    }
    /**
     * 根据科研教练员查询运动员  返回list
     * @param atsEmpAthlete
     * @return 田家龙
     */
    @RequestMapping("selectByOldCoach")
    @ResponseBody
    public List<AtsEmpAthlete> selectByOldCoach(AtsEmpAthlete atsEmpAthlete){
        return atsEmpAthleteService.selectByOldCoach(atsEmpAthlete);
    }
}
